package jm.nj.demo16main.annotation;
/*
* 自定义一个注解,注解只增加一个属性,属性的名字叫value
 * 使用该注解的时候,给属性赋值,可以省略key(value),直接写赋值
 *
 * 直接赋值
 *
 * 元注解:用于修饰自定义注解的JDK提供的注解(修饰注解的注解)
 * 修饰注解的注解
 *
 * java.langannotation.元注解
 * @Retention  :指定注解的声明周期
 *      注解Retention的属性:RetertionPolicy value 是一个枚举
 *      指示注释类型的注释要保留多久。如果注释类型声明中不存在 Retention 注释，则保留策略默认为 RetentionPolicy.CLASS。
 *      RetentionPolicy.SOURCE 被修饰的注解只能存在源码中，字节码class没有。用途：提供给编译器使用。
 * 		RetentionPolicy.CLASS 被修饰的注解只能存在源码和字节码中，运行时内存中没有。用途：JVM java虚拟机使用
 * 		RetentionPolicy.RUNTIME 被修饰的注解存在源码、字节码、内存（运行时）。用途：取代xml配置
 * @Target:确定注解的作用范围
 *      注解Targer 的属性:ElementTyte[] value 是一个枚举
 *      指示注释类型所适用的程序元素的种类。
 *如果注释类型声明中不存在 Target 元注释，则声明的类型可以用在任一程序元素上。
 * 		如果存在这样的元注释，则编译器强制实施指定的使用限制。
 *
 * 限制
 * ElementTyte.TYPE   修饰类 /接口
 * ElementTyte.CONSTRUCTOR  修饰构造
 * ElementTyte.METHOD  方法
 * ElementTyte.FIElD   字段
 *
* */

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})  //做限定
public @interface MyAnnotation3 {
    public abstract String[] value1();
}


